Systems and methods for providing an instant communication channel within integrated development environments

ABSTRACT

A method and system may be provided for recording discussions about computer code in an integrated development environment (IDE). In some aspects, a communication channel is integrated with an IDE. Communications and discussions may be tracked and linked with specific code sections. In some aspects, a predefined graphical interface may be used in forming the communications for the communication channel.

BACKGROUND

Conventional systems for software development incorporate many enhancements to facilitate the development of code, updates, and code modifications. A variety of integrated development environments (“IDE”) exist to provide the necessary architecture to organize code development tasks, as well as manage distribution of those tasks across development groups. Unfortunately, coordination of work remains a significant challenge. The need for merging and reconciliation of code changes remains a significant stumbling block, causing inconsistencies and internal conflict within developed code.

SUMMARY

It is realized that the lack of record beyond tracked changes in the IDE, including for example, the lack of record of discussions about specific problems in the code, specific issues being resolved, etc., leads to increased issues with code divergence, conflict, and errors. According to various aspects, many of the issues with conventional IDEs and code development in general can be resolved with an integrated communication channel. According to another aspect, all communications and discussions can be tracked and linked with specific code sections (e.g., line, lines, code file, code tree elements, etc.). Thus, any identified problem, issues and/or planned resolution can be readily accessible to all the developers in a group. For example, based on linking discussions and communications to specific code as the code is being development, makes the collective knowledge of the development cycle accessible to all subsequent reviewers.

According to one embodiment, a real time communication channel is integrated into an IDE application as a plugin executable. The plugin executable can be configured to update an IDE application to display a communication stream alongside of code editing windows or displays. In one example, a user installs the plugin into their IDE application and activates it via selection in the user interface (“UI”) or by selection of special key or keys. Once activated, the plugin is visualized as a communication panel appearing adjacent to code editor displays. The communication panel provides a real time chat stream between users (e.g., developers). The real time communication stream also provides a real time activity screen. For example, users receive communications and also notifications of activity occurring within the code being developed. According to another example, the activity notification provides a direct link to explore the changes, modifications, or updates associated with notification.

According to another aspect the system can be configured to dynamically identify and link messaging, message threads, and/or any communication channel to select segments of code. In further aspects, the system is configured to dynamically adjust the definition of the code segments that the respective messages are tied to. In one example, a particular code segment (e.g., group of code lines) could be lifted completely from one source file and moved to another. Without dynamic tracking of the code segment, the original message thread tied to the location of the original code segment would be orphaned and ultimately lost. This is a failure of many conventional message tracking systems, which various embodiments discussed herein resolve. Various examples of the system provide functionality not enabled by conventional approaches and/or conventional computer systems.

In one example, the system implements dynamic machine leaning algorithms that enable the system to automatically identify changes within a code segment (e.g., expansion of a method or named function to a greater number of code lines, changes in numbers of line of code, etc.). Machine learning can analyze code to develop matching protocols (e.g., capture and match on method names, variable name, specific code snippets (e.g., function calls, wrappers, etc.)) that can run in background to identify moved code, new locations, and/or re-introduced code.

The system is also configured to use changes within code segments to update metadata on the code segment. For example, the system analyzes changes so that an expanded code segment (e.g., lines 10-25 from lines 10-20) are linked to a message thread about that code segment. In one example, an algorithm is implemented on the system to analyze content of respective message threads and extract information for updating metadata links to message threads (e.g., “I added code lines 12-15 to method (xxxxx) to fix the locking problem). The system automatically increases the linked code segment definition by the added lines. In other embodiments, the system can implement monitoring algorithms (alone or in addition to other detection algorithms) that identify changes to code segments as they are made, and identifies changes that are used to update metadata linked messages, communications, and/or threads.

In various embodiments, the metadata on the respective code segments are stored separately from the code, code revision, and/or source files. In some examples, the separately stored metadata can be retained for the life of the software project, enabling future use of the metadata, context information, matching information, etc. In one example, this enables the system to identify and match even on deleted code to re-capture and leverage prior messaging and development context.

In yet other embodiments, older versions of code can be linked to the newest and most useful message threads. Often old code is needed to diagnose or test for issues in newer versions. In other alternatives, older versions of code may represent a more stable versions. Often such reversal to old versions comes with significant sacrifice (e.g., any new developments fixes, etc.) and may include re-introduction of long forgotten bugs. Metadata records of the messages and communication between developer can not only identify such issued but retain the specific fixes implemented to resolve. In some circumstances, it could be the fixes themselves that resulting in the new programs instability, but without the linkage between current message thread and especially old versions of code—developers are provided no capability to re-capture prior development context in various conventional systems.

Still other aspects, embodiments, and advantages of these exemplary aspects and embodiments, are discussed in detail below. Any embodiment disclosed herein may be combined with any other embodiment in any manner consistent with at least one of the objects, aims, and needs disclosed herein, and references to “an embodiment,” “some embodiments,” “an alternate embodiment,” “various embodiments,” “one embodiment” or the like are not necessarily mutually exclusive and are intended to indicate that a particular feature, structure, or characteristic described in connection with the embodiment may be included in at least one embodiment. The appearances of such terms herein are not necessarily all referring to the same embodiment. The accompanying drawings are included to provide illustration and a further understanding of the various aspects and embodiments, and are incorporated in and constitute a part of this specification. The drawings, together with the remainder of the specification, serve to explain principles and operations of the described and claimed aspects and embodiments.

BRIEF DESCRIPTION OF THE FIGURES

Various aspects of at least one embodiment are discussed below with reference to the accompanying figures, which are not intended to be drawn to scale. Where technical features in the figures, detailed description or any claim are followed by reference signs, the reference signs have been included for the sole purpose of increasing the intelligibility of the figures, detailed description, and claims. Accordingly, neither the reference signs nor their absence are intended to have any limiting effect on the scope of any claim elements. In the figures, each identical or nearly identical component that is illustrated in various figures is represented by a like numeral. For purposes of clarity, not every component may be labeled in every figure. The figures are provided for the purposes of illustration and explanation and are not intended as a definition of the limits of the invention. In the figures:

FIG. 1 is an example screen capture of a user interface (“UI”), according to one embodiment;

FIGS. 2A-2B are screen captures of an example UI, according to one embodiment;

FIGS. 3-6 are example screen captures of an example UI, according to one embodiment;

FIGS. 7A-7B are example screen captures of an example UI, according to one embodiment;

FIGS. 8A-8B are example screen captures of an example UI, according to one embodiment;

FIG. 9 is an example screen capture of an example UI, according to one embodiment;

FIG. 10 is a is a block diagram of a communication system for providing a real-time communication channel in a software development environment, according to one embodiment;

FIG. 11 is an example process flow for building code associated message streams, according to one embodiment;

FIG. 12 is a block diagram of a special purpose computer system, according to one embodiment;

FIGS. 13-16 are example screen captures of an example UI, according to one embodiment;

FIG. 17 is an example process flow for determining one or more differences between live copies of a codeblock from different users, according to one embodiment; and

FIGS. 18, 19A-19E, 20A-20B, 21A-21E, 22A-22D, 23A-23I are example screen captures of another example UI, according to one embodiment.

DETAILED DESCRIPTION

Stated broadly various aspects describe the integration of a communication channel into source code development environments. The source code development environments may also incorporate version control systems or services to facilitate code development. In some embodiments, a real time communication channel is integrated into an IDE application. The integration may be based on a plugin or extension to the IDE environment. In further embodiments, the real time communication channel is configured to display a communication stream alongside of code editing windows or displays. In one example, a user installs the plugin into their IDE application and activates it via selection in the user interface (“UI”) or by selection of special key or keys. Once activated, the communication panel is configured to appear adjacent to code editor displays and link user communications to specific portions of the code, code tree, or coded functions, among other options. The communication panel provides a real time chat stream between users. The real time communication stream also provides information on code related activity in real time. For example, users receive communications and also notifications of activity occurring within the code being developed. According to another example, the activity notifications provide a direct link to code that enables users to explore the changes, modifications, or updates associated with notification.

Examples of the methods and systems discussed herein are not limited in application to the details of construction and the arrangement of components set forth in the following description or illustrated in the accompanying drawings. The methods and systems are capable of implementation in other embodiments and of being practiced or of being carried out in various ways. Examples of specific implementations are provided herein for illustrative purposes only and are not intended to be limiting. In particular, acts, components, elements and features discussed in connection with any one or more examples are not intended to be excluded from a similar role in any other examples.

Also, the phraseology and terminology used herein is for the purpose of description and should not be regarded as limiting. Any references to examples, embodiments, components, elements or acts of the systems and methods herein referred to in the singular may also embrace embodiments including a plurality, and any references in plural to any embodiment, component, element or act herein may also embrace embodiments including only a singularity. References in the singular or plural form are not intended to limit the presently disclosed systems or methods, their components, acts, or elements. The use herein of “including,” “comprising,” “having,” “containing,” “involving,” and variations thereof is meant to encompass the items listed thereafter and equivalents thereof as well as additional items. References to “or” may be construed as inclusive so that any terms described using “or” may indicate any of a single, more than one, any combination of, and all of the described terms.

FIG. 1 is a screen capture of an example user interface (UI), showing an integrated development environment 100. The IDE 100 includes a navigation panel 102 organizing source code files, configuration files, libraries, etc. Once files are selected in the navigation panel 102, the editing panel 104 is configured to display the associated file/code for editing in the UI. FIG. 2 is a screen capture of an example UI 200, showing the IDE with the communication plugin enabled. For example, once a user installs the plugin onto their IDE application (e.g., ATOM) a real time communication stream is configured to be displayed in a communication panel 206. In some examples, the plugin must be activated by the user, by selection in the UI or selection of special keys, and once active display 206 appears in the UI.

Messages (e.g., 208, 210, and 212) are displayed chronologically in the communication stream associated with a directory or file being displayed in the editing panel 204. In addition to user messages, the communication panel 206 is configured to display notifications (e.g., 214) associated with the file or directory being accessed (i.e., visualized in panel 204). According to some embodiments, the integration of the communication channel and tracking of message streams and notifications provide significant enhancement over convention development approached. For example, under conventional development approaches the user would need to switch to a message application or service to start a communication stream, moreover, the user would have to determine the party with which they wish to communication which would require accessing yet another application.

According to some embodiments, creating a message to another user (e.g., a developer) is streamlined by typing into a text input box at 216. According to another embodiment, utilizing additional features provided by the communication plugin, a user can select portions of code (e.g., via highlighting by mouse or other pointing device) and begin a message associated specifically with the selected portion of code. Once selected in the UI, the system is configured to maintain a reference to a block/section of code in response to selection in the UI. According to one embodiment, the reference is embedded in a message and can be stored on the system and accessed when messages are displayed or read. For example, the references, along with a copy of the code itself, can be stored on the system or as an attachment to the message, and can be included as part of the message metadata.

FIG. 2B is an example user interface showing a portion of code 230 selected in the editing panel 204, and an associated message being generated in the communication panel 206. The system enables the user to enter text at 216, responsive to an indication the user wants to create a message regarding the highlighted code segment (e.g., right click on code segment and select message, hot key “<cntrl>m,” etc.). At 223, the system displays the association between the selected code (e.g., 230) and the message being created. In some embodiments, the system is configured to analyze the selected code responsive to selection. The analyze is executed by the system to identify a recipient for the message without requiring user identification.

For example, the system analyzes author or editor information associated with the selected code segment to provide a recipient for the message automatically (e.g., at 225 the system identifies “Larry Wall” as the author of the selected code). In one example, the system identifies the code author or editor from a local repository or searches a code storage repository (e.g., git repository) for information on an author or editor for code identified in the user interface.

It is realized that such an integrated messaging panel and automatic detection of responsible parties for code elements, provides significant improvement over known development environments and communication systems. In the first instance, the user does not have to transition to a separate communication application (e.g., e-mail), and further unlike a conventional implementation, the user does not have to search a version control system to identify the author or editor of the selected code (e.g., GIT). For example, in a conventional system using GIT, a new terminal would be needed by the user to investigate the author with GIT_history or GIT_blame (i.e., access attribution records).

According to further aspects, a system for tracking comments on source code over time is provided. The system handles gracefully linkages between code segments under development and message regarding those code segment. In some examples, this is particularly challenging due to nature of software development, where code segments are dynamically altered, deleted, moved, re-named, and overwritten (e.g., intentionally or otherwise). In conventional approached, most software is developed using a decentralized version control system (VCS) which allows each developer to have a full copy of all of the files that make up a project.

During development periods, a developer might make several changes to several of these files, before sharing these changes with the rest of the team in something called a commit set. When the developer is done with her work, sometimes over several days or weeks, she can share the work with the team. This commit set describes the changes to all of the files which have changed; adding lines, deleting lines, changing lines, adding files, renaming files, etc.

Various embodiment, (and in some examples a system/application named “CodeStream”) provide a mechanism to add a comment to a specific point in a file, a line in a file, or a range in a file, and in further example preserve that linkage across any changes (e.g., deletes, modifications, expansions, moves, re-names, etc.). In some embodiments, the comment is displayed in the development user interface like a chat-like block of text that a user will enter. The comment refers to a portion of the code (typically called a codeblock or referred to as a code segment—which can be identified by code line number, for example). This codeblock might start at, for example, the beginning line 12 of a file, and go all the way to the middle of line 26. The comment refers to that specific range, and in some examples is stored in a metadata file providing information on the context of the comment and including for example the line numbers associated with the comment.

Over time, as the code changes, the system gracefully (and automatically) handles lining the comment so that the comment still points to the same codeblock (even as the code block changes). Examples of changes include:—code could be added above the range currently identified, in which case perhaps the comment now should refer to lines 14-28; code removed above the range; code added within the range, in which case the comment now should refer to lines 12-36; code could be removed across one of the boundaries of the range; entire codeblock could be removed, so the comment is no longer relevant; entire codeblock could be moved to a different part of the file, or to a different file, or to a new file

According to various embodiments, updates to code ranges can be applied to recalculation of the appropriate range for that comment so that it applies only to that version of the file (after the changes were made). According to various embodiments, the algorithm is configured to determine the best way to move the range, or delete the range, or modify the range as appropriate. The new locations and statuses of the range will be stored for this particular version of the file.

In yet other embodiments, over time when the file changes again, the algorithm is executed by the system to track how the comments have moved. In some examples, the system tracks cut and paste into new files, and updates metadata associated with comments or communications. In other examples, the system can analyze new code changes to determine if any previous comment or message thread match the new code—if a match results the linkage can be made. In yet other embodiments, the algorithm detects changes to existing code and can analyze the prior version to determine that the new code lines were introduced within or into the middle of the code block—in which case the system expands the linkage to the larger number of code lines. Further, the system can likewise respond and update linkage in response to deletions within the codeblock.

The messaging linkage metadata can be accessed and used to identify the most relevant messages to whatever files is being accessed in the development or version control environment. Thus, whichever version of the file a user loads into their editor (e.g., even an older version) the comments will refer to the best possible references within the code.

FIG. 3 is a screen capture of an example UI 300. UI 300 illustrates an example message 301 generated in the communication panel 206. The example message 301 incorporates the recipient and text of a user message at 302. The example message 301 also includes a copy of the code segment on which the author wishes to communicate. According to some embodiments, provide the code associated with the message improve the efficiency of the development environment over known approach. For example, the communication plugin provides functionality in conventional environments and reduces the operations needed to be executed in conventional environment. In other examples, inclusion of the code in the message allows the recipient to immediately understand the context of the question, and by navigating to the identified code, the user also has accessed to any preceding conversation threads and/or notification messages associated with the code.

FIG. 4 is a screen capture of an example UI 400, where the user “Larry Wall” has sent a message to the author of the code. According to one embodiment, the new message 401 is displayed within the message panel 406. Matches in the message text to code elements are displayed to visually show the correspondence between the message text and code elements in the UI (e.g., at 408 and 410). Text that corresponds to code elements can be configured for selection in the UI to transition the editing panel 406 to the respective place in the code containing the segment. Similar to the example provided in FIG. 3 (e.g., at 302 and 304), the message 401 contains a visualization of the code associated with the message at 412.

According to some embodiments, the system is configured to identify changes in code, and flag that information in the user interface when constructing a message for display. For example, at 414 a visual indicator is presented (e.g., red triangle with exclamation point) to provide a visual indication, for example, of a code change in the message that reflects a different version of the code being viewed by the current user. The visual indicator can be responsive to pointer events in the UI (e.g., mouse over, and mouse over hover, etc.). In this example, a mouse over and hover operation triggers the UI to display a message “This block of code is different that your current copy.”

Clicking on the message 401 causes the system to transition to another view in the user interface configured to focus the user on the conversation stream associated with the code in the message. FIG. 5 illustrates an example UI showing a view of the message 501 selected in the UI displayed in a communication panel 506 with a respective message stream, and focusing on the associated code 508 in an editing panel 504. According to some embodiments, the code change message stream provides some additional functionality. For example, the communication panel provides options to the code author (e.g., original author, editing user, responsible editor, etc.) to accept a proposed code change (e.g., via selection of “Apply Patch” at 520). Other functions include “Show Diff” at 522, which triggers the system to display a code difference view in editing panel 504. The code difference view shows changes to the code in markup language. The system also provides functions to copy code at 524 and Add a Reply at 526. Selecting 526 allows the message recipient to continue the communication thread. For example, the recipient can ask why the change is necessary, and the subsequent answer is displayed in communication panel 506 in real time. According to various embodiments, the communication stream associated with the code segments is maintain for review by later users, who are then able to review the code changes, and through the message stream immediately understand the purpose or reason for such changes.

FIG. 6 shows an example message stream associated with a code change and messaging back and forth between the requestor and the code author or responsible user. The message stream can be displayed in a communication panel (e.g., at 606). According to some embodiments, selection of code change message transitions the system to a focused code review message stream (e.g., in 606). By selecting 608 the system is configured to transition back to a general file or directory message stream (e.g., like in FIG. 4 at 406). In further embodiments, code specific message streams are stored for subsequent access. For example, annotations are displayed in conjunction with code line numbers in editing panel 604 at 610. The annotation visual elements are configured to display in all visualizations of the code. The annotation indicator is configured to transition the system to code specific message stream views that enable the user to review, for example, proposed code changes, messaging between the developers, etc.

FIG. 7A is an example screen capture of a UI showing unread message notification. In the space to the right of the code tree listing (e.g., 702), at column 710 a count of any unread messages associated with each file in the code tree is displayed. The system maintains information on new message and a read status. In some embodiments, the system is configured to display an unread message notification with a count of the unread messages included in the display. The notification is presented in association with the file and/or code to which the message pertains. In some embodiments, users are given fine grain control over the appearance of these notifications, being able to turn notifications off per file, across a directory, or for the entire code tree. FIG. 7A also illustrates a transition from the message stream view in FIG. 6 to the message stream view of FIG. 7A, responsive to selection of CHANELOG.md at 720. The transition includes a transition in the editing panel 704 to show the code associated with the CHANELOG.md file, and the communication panel 706 reflects messages associated with the CHANELOG.md file. AT 730 additional unread message notifications are displayed. Unread notification displays can be configured to highlight messages that are directed to a current users. For example, 730 can be displayed in read to bring the user's attention to the unread message notification that includes messages directed to the current user. Selecting 730 in the UI (e.g., clicking with a mouse and pointer) transitions the system the example UI shown in FIG. 7B.

Once the user views the messages, the unread message indicator is no longer displayed in column 750. According to some embodiments, within a message stream additional displays can be displayed to draw the user's focus to their messages. For example, at 760 an “A” indicator can be display in a highly visible color (e.g., red) to bring attention to a specific message. As discussed above, the system provides fine grain control over notification massages. For example, right clicking on a file in the code tree provides a menu option to mute notification messages. Additional options in the menu can include “bold” and “badge” which are configured to allow a user to tailor message reporting information/visualization on the system. According to one embodiment, a system default is configured to display a numerical indicator showing # of new messages to the file (for example, that number of messages can be referred to as a “Badge”—e.g. on an iPhone, the red number that appears over the messages icon in the UI shows the user how many unread messages the user has across all of the user's conversations). For example, if a user wants to know that there are new messages, but does not need the additional information on how many, the user can select “Bold” from the menu. Responsive to selection of bold the system is configured to limit UI displays of unread messages to a visual indication without the number of unread messages. In one use case, the user can select this options in the UI when the user wants to know that there is conversation, but does not want to be overwhelmed by 872 unread messages. According to another embodiment, a mute all (e.g., 770) option is available to turn off the displays associated with the communication streams for all the files in the code tree.

FIG. 8 shows another example UI according to one embodiment that exposed version control system (“VCS”) information captured from a version control system (e.g., GIT) integrated with the user's IDE. A VCS panel 800 can be displayed on the right side of the screen above a message stream associated with a file in the code tree shown at 802. The VCS panel 800 is configured to display information captured by the system, that would normally require a transition to a version control system external to the IDE and associated operations (e.g., GIT blame or history). The VCS information enables a comprehensive view of the code and version control information to improve over convention commit processing in IDEs. The additional information exposed includes: contributors at 810, branch information at 812, and last edit information at 814. In some embodiments, an edit history timeline can be displayed (e.g., 822) that is configured to display associated edits responsive to selection in the timer (e.g., mouse click). The real time nature of the communication channel provide by the plug-in and/or IDE communication system enable further functionality akin to enhanced presence for software developers. For example, a real time status window can display actions underway by other developers.

According to one embodiment, display 820 includes real time status notification that can covey that another user is currently editing a file (e.g., FIG. 8B 820) that the current user is working on committing their changes to. Further embodiments provide real time notification of potential merge conflicts, where another user has begun editing the same code or code lines being reviewing for a commit (e.g., at 820—“Pending merge conflict with Ken Thompson”). Some embodiments of the system maintain change status information on lines of code and compare editing being executed by other users in real time. Merge conflicts are identified by the system when other users edit the same code lines from prior versions of the code, that another users has also edited. Providing notifications on merge conflicts as they occurring represents a significant advance over other approaches.

Selection in the VCS panel 800 of “Diff” at 830 transitions the system to a difference view of the code in editing panel 804. FIG. 9 is a screen capture of an example UI 900 showing a difference view of the code at 904. Selection of Blame 832 FIG. 8A transitions to a view of attribution information for edits. Each of the function provides additional capability to improve the user's capability and understanding during code commits. Moreover, the communication panel available in each of the views, facilitates real time resolution of questions and/or problems associated with specific code. Those messages then become readily accessible context for later review of the same code. Each of the functions described with respect to the UI captures is enabled by an underlying IDE communication system or plugin. Various embodiment are provided as plugin extensions that integrate and leverage functionality provided by an existing IDE application. Some embodiments include IDE applications architected with the communication interface and tracking functions built in without the need for extensions or plugins.

Shown in FIG. 10 is a block diagram of an IDE communication system 1000. According some embodiments, the IDE communication system can comprise an IDE application with communication functions built in or can comprise a plugin or extension for existing IDE applications. The system 1000 is configured manage communications between a user base accessing a development environment. According to one embodiment, the system manages communication while maintain associations to source code identified in the development environment. In one example, the system enables users to select lines of code on which to build a message. The system records the associations to the lines of code and the composed message, and enables a message stream between the user base tied to the lines of code. The specific message stream can also be linked to the source code file, and be accessed in a higher level view of the message streams associated with the source code file. The system further enables transitions between the focused view associated with the specific lines of code and views of the file and associated larger message streams.

According to various embodiments, the system is configured to manage messaging functions and saved links between messages and subsets of source code. Further, system enables chat sessions (e.g., instant messaging) to take place around a specific location or block of code and permanently creates an association between source code and the conversations between users about it. According to some embodiments, the record of the conversations can be specific and include, for example, which version/branch of the file/function/block it refers to. The system and associated UIs can be configured to display message stream associated with a specific version/branch of the file/function/block and can also allow access and/or display to message streams for all version/branches of the file/function/block or code. For example, the older versions and associated messages can display in chronological order. In other examples, options to navigate to other versions or branches can be displayed in the UI.

According to various embodiments, the system is configured to include indicators within displays of source code of extant conversations. In some examples, the displays include annotation indicators displayed in conjunction with code line number displays. In other embodiments, the system can be configured to provide displays for Unread Message Indicators associated with source files, for example, shown in a code tree. The system can also be configured to display different visual indicators for pending patches, at-mentions, commits, etc., in the user interface. Selection in the UI can trigger the system to transition to the respective code/source file/etc. to review along with any associated message streams. In some embodiments, the system is configured to generate and display a history slider inside any IDE, where the history slider is configured to transition through a message stream associated with some code or function. The user can transition through chronological message based on manipulating the history slider in the UI.

Integration into the development environment (for example using a development environment engine 1002) provides a number of functions that extend traditional implementations. In some embodiments, the system is configured to automatically generation addressee information and pre-fill address information in a message responsive to selection of code in the UI (e.g., with engine 1002). For example, the system can be configure to pull email addresses from any code repository, and automatically populate the addressee in the message responsive to selection of code line(s) or code portions. In one example engine 1002 can be configured to search code or code repositories (e.g., even external code repositories) for associated e-mail address for authors or code administrators and return that information to the system for automatic messaging.

The system can also be configured to augment code review processes for development. For example, the system is configured to improve formal code review, based on the message streams and archives of issues, resolutions, proposed changes, and commit operations. In some embodiments, the system includes a tracking engine 1006 configured to associated code, code lines, code segments, etc. to message streams about them. In this manner, the system uses the messages streams and presentation to subsequent users to implement code review as an organic by-product of strong communication within and about the code. In other examples, use of the communication system enhancements can reduce and eliminate the need for formal code reviews while preserving compliance with formal code review protocol. In other words, the tracking of issue and resolution and/or code changes over time, provides the needed information for a formal code review process. According to one embodiment, review of each message by subsequent users can be tracked on the system and used to clear formal code review requirements.

According to another embodiment, the system can include a communication engine 1004 specially configured to manage enhanced communication functionality. Although in other embodiments the system can be configured with the same functionality without a specialized engine. The communication engine is configured to enable instant messaging and/or chat between the users of the development environment. For example, the communication engine provides direct messaging embedded into any IDE. Further embodiments, enable channel messaging, where members are added to a topic specific channel by a channel creator or users can add themselves, or request additional to specific communication channels For example, a “bugfix” channel can be used to post bug information, and serve as a topic specific message stream that exists apart for the code based message streams. According to various embodiments, both message streams can be tied to specific code and both message streams can be used to access various messages, but the channel specific stream provides a topic organization (e.g., all bugs, backend rewrite channel (e.g., fixes specific to bank end issues), etc.) as opposed to code line/file/function associations of other message streams.

In further embodiment, the communication engine 1004 can operate in conjunction with an interface engine 1008 to provide contextual indicator in a user interface regarding pending communication or unread messages. The interface engine can generate specific visualization to identify messages to a current user or provide general notification to messages within a message stream or channel. Further the interface engine and/or the communication engine can be configured to provide real-time notification of file modifications and can detect and display real-time events to the user base.

According to some embodiments, the interface engine 1008 can also receive information from a tracking engine 1006. In one example, the tracking engine can be configured to maintain information on code changes across all users. The tracking engine can be configured to detect merge conflicts that result from multiple users altering the same code. For example, based on merge conflict information the interaction engine can be configured to display real-time notification of pending merge conflicts and prevent the conflict from being committed by the respective parties. The tracking engine 1006 is configured to detect real-time conflict between two or more developers and trigger notification messages to the respective users.

Further enhancements over conventional IDE approaches include a one-click patch user interface configured to enable code patches produced by other developers to be automatically applied based on review of the code by the original code author or code administrator. Additionally, the system and/or communication engine 1004 is configured to enable messaging and message stream tracking across multiple development environments. For example, a first user operating a first IDE application and a second user operating a second IDE application can both develop the same code base through their respective environments, and are both given access to messages streams sent to users in either environment or between users operating in different environments. According to various embodiments, the system and/or communication engine 1004 can operate as a common interface between any number of different IDE applications, allow any number of users to select between and number of development platforms, while still enabling the common communication channel and tracking functions that eliminate many of the issues with conventional IDE applications.

For example, the system is configured to add a real-time conversation stream to any type of document (e.g., a document can be a source code file, a “word doc”, a spreadsheet, etc.) and for example, enable any one or more of: track any communications, annotate the document (e.g., source code file) to enable access to prior messages, auto-direct new messages, notify users of user directed message, maintain unread indicators within the document, among other options.

In further embodiments, the communication streams tracked by the system are linked to code line and/or function descriptions (e.g., the system is configure to recognize that selected code lines in the UI are part of a given function (e.g., system is configured to search preceding or post lines for method calls, class definitions, start functions characters, etc.). That information is linked to the given messages and/or messages streams by the system automatically, so the associations and/or functions can be searched directly to retrieve the associated messages within particular code repository.

In further embodiments, the system manages message stream so that responsive to selection in the user interface the system is configured to jump to points in a conversation stream based on commit. In one example, commit operations are tracked by the tracking engine 1006, and are accessible based on a commit operation, code line, etc. In further embodiment, the system and/or tracking engine stores information on commit history to enable automatic generation of review teams. For example, the system is configured to automatically determine a review team based on commit history queried from a VCS application or service. Further the system can build a review team from any users who had engaged in message streams associated with code commits on specific files, functions, code lines, etc. In one example, the system auto-assembles teams based on VCS commit history, where the team is defined by member of matching discussion groups. The system is also configured to facilitate code review inside the IDE, further facilitating code review operations.

As discussed above, various embodiments of the communication system can include a variety of engines configured to perform specific tasks within the system, however, various embodiments are configured to perform the same or similar functions without need of instantiating the respective components discussed above.

FIG. 11 is an example process flow 1100 for building code associated message streams. According to one embodiment, process 1100 begins with selection of one or more code lines in a user interface at 1102. In other examples, the process can begin with selection of any document or portion of a document in an editing panel of an IDE. Responsive to selection of the code lines, a message interface can be displayed at 1104. In some embodiments, the selected code lines and/or associated code file can be used to identify an author of the code, a last editor of the code, or a responsible party (e.g., code administrator) for the selected code at 1106. The identified user is then displayed in the messaging interface as an auto-generated recipient of a message about the selected code. Once any message text is received, the process 1100 continues at 1108 with communication to the message to the specified recipients. In some embodiments, messages are communicated to users on other IDE applications, and can optionally be indicated to other users via unread message notifications. At 1110, the message is stored with associations to any one or more of the selected code, code lines, code functions, or code file. Subsequent access to the same code file will display any messages streams associated with the code file. Selection within the message stream can be trigger a transition by the system to a view of code specific message stream. In another example, selection of code in the editing panel can transition a communication panel to a code specific view of a message stream.

Process 1100 is illustrated as an example process flow. In other embodiments, the various steps illustrated can be executed together, or ones of the various steps can be omitted or executed as part of other processes.

The various functions, processes, and/or pseudo code described herein can be configured to be executed on the systems shown by way of example in FIG. 10 . The systems and/or system components shown can be specially configured to execute the processes and/or functions described. Various aspects and functions described herein, in accord with aspects of the present invention, may be implemented as specially configured hardware, software, or a combination of hardware and software on one or more specially configured computer systems. Additionally, aspects in accord with the present invention may be located on a single specially configured computer system or may be distributed among one or more specially configured computer systems connected to one or more communication networks.

For example, various aspects, components, and functions (e.g., auto-generate recipient, link messages and code lines, automatically build channel and/or team, code review functions, generate unread message notification, navigate to code specific message streams, etc.) may be distributed among one or more special purpose computer systems configured to provide a service to one or more client computers, mobile device, or to perform an overall task as part of a distributed system. Additionally, aspects may be performed on a client-server or multi-tier system that includes components or engines distributed among one or more server systems that perform various functions. Consequently, examples are not limited to executing on any particular system or group of systems. Further, aspects and functions may be implemented in software, hardware or firmware, or any combination thereof. Thus, aspects and functions may be implemented within methods, acts, systems, system elements and components using a variety of hardware and software configurations, and examples are not limited to any particular distributed architecture, network, or communication protocol.

Referring to FIG. 12 , there is illustrated a block diagram of a distributed special purpose computer system 1200, in which various aspects and functions are practiced (e.g., including a replication component (e.g., captures executed write operations and distributes to nodes hosting the same copy of data), a configuration component (e.g., enables arbiter participation in either or both data commitment and primary election), an election component (e.g., triggers election protocols in response to primary failure), among other options). As shown, the distributed computer system 1200 includes one more special purpose computer systems that exchange information. More specifically, the distributed computer system 1200 includes computer systems 1202, 1204 and 1206. As shown, the computer systems 1202, 1204 and 1206 are interconnected by, and may exchange data through, a communication network 1208. For example, a segment of a distributed database can be implemented on 1202, which can communicate with other systems (e.g., 1204 and 1206), which host other or remaining portions of the system, message data, and/or copies of the linked message data.

In some embodiments, the network 1208 may include any communication network through which computer systems may exchange data. To exchange data using the network 1208, the computer systems 1202, 1204 and 1206 and the network 1208 may use various methods, protocols and standards, including, among others, TCP/IP, or other communication standard, and may include secure communication protocols VPN, IPsec, etc. To ensure data transfer is secure, the computer systems 1202, 1204 and 1206 may transmit data via the network 1208 using a variety of security measures including, for example, TLS, SSL or VPN or other standard. While the distributed computer system 1200 illustrates three networked computer systems, the distributed computer system 1200 is not so limited and may include any number of computer systems and computing devices, networked using any medium and communication protocol.

As illustrated in FIG. 12 , the special purpose computer system 1202 includes a processor 1210, a memory 1212, a bus 1214, an interface 1216 and data storage 1218 and further includes any one or more of the component discussed above to implement at least some of the aspects, functions and processes disclosed herein, as either a stand-alone system or part of a distributed system. In some embodiments, the processor 1210 performs a series of instructions that result in manipulated data. The processor 1210 may be any type of processor, multiprocessor or controller. The processor 1210 is connected to other system components, including one or more memory devices 1212, by the bus 1214.

The memory 1212 stores programs and data during operation of the computer system 1202. Thus, the memory 1212 may be a relatively high performance, volatile, random access memory such as a dynamic random access memory (DRAM) or static memory (SRAM) or other standard. However, the memory 1212 may include any device for storing data, such as a disk drive, hard drive, or other non-volatile storage device. Various examples may organize the memory 1212 into particularized and, in some cases, unique structures to perform the functions disclosed herein. These data structures may be sized and organized to store values for particular to specific database architectures and specific data types, and in particular, may include standardize formats for organizing and managing data storage.

Components of the computer system 1202 are coupled by an interconnection element such as the bus 1214. The bus 1214 may include one or more physical busses, for example, busses between components that are integrated within the same machine, but may include any communication coupling between system elements including specialized or standard computing bus technologies such as IDE, SCSI, PCI and InfiniBand or other standard. The bus 1214 enables communications, such as data and instructions, to be exchanged between system components of the computer system 1202.

The computer system 1202 also includes one or more interface devices 1216 such as input devices, output devices and combination input/output devices. Interface devices may receive input or provide output. More particularly, output devices may render information for external presentation. Input devices may accept information from external sources. Examples of interface devices include keyboards, mouse devices, microphones, touch screens, printing devices, display screens, speakers, network interface cards, etc. Interface devices allow the computer system 1202 to exchange information and to communicate with external entities, such as users, vendors, and other systems.

The data storage 1218 includes a computer readable and writeable nonvolatile, or non-transitory, data storage medium in which instructions are stored that define a program or other object that is executed by the processor 1210. The data storage 1218 also may include information that is recorded, on or in, the medium, and that is processed by the processor 1210 during execution of the program. More specifically, the information may be stored in one or more data structures specifically configured to conserve storage space or increase data exchange performance.

The instructions stored in the data storage may be persistently stored as encoded signals, and the instructions may cause the processor 1210 to perform any of the functions described herein. The medium may be, for example, optical disk, magnetic disk or flash memory, among other options. In operation, the processor 1210 or some other controller causes data to be read from the nonvolatile recording medium into another memory, such as the memory 1212, that allows for faster access to the information by the processor 1210 than does the storage medium included in the data storage 1218. The memory may be located in the data storage 1218 or in the memory 1212, however, the processor 1210 manipulates the data within the memory, and then copies the data to the storage medium associated with the data storage 1218 after processing is completed. A variety of components may manage data movement between the storage medium and other memory elements and examples are not limited to particular data management components. Further, examples are not limited to a particular memory system or data storage system.

Although the computer system 1202 is shown by way of example as one type of computer system upon which various aspects and functions may be practiced, aspects and functions are not limited to being implemented on the computer system 1202 as shown in FIG. 12 . Various aspects and functions may be practiced on one or more specially configured computers having different architectures or components than that shown in FIG. 12 which can be modified to include the specially purpose components and/or functions discussed. For instance, the computer system 1202 may include specially programmed, special-purpose hardware, such as an application-specific integrated circuit (ASIC) tailored to perform any one or more operations disclosed herein (e.g., validating received operations, routing write operations, replicating operations, among other examples). While another example may perform the same function(s) using a grid of several computing devices running MAC OS System X with Motorola PowerPC processors and several specialized computing devices running proprietary hardware and operating systems.

The computer system 1202 may be a computer system including an operating system that manages at least a portion of the hardware elements included in the computer system 1202. Additionally, various aspects and functions may be implemented in a non-programmed environment, for example, documents created in HTML, XML or other format that, when viewed in a window of a browser program, can render aspects of a graphical-user interface or perform other functions.

FIG. 13 illustrates an example UI 1300 showing a view of message 1301 selected in the UI displayed in a communication panel 1306 with a respective message stream, and focusing on the unmodified, original code 1308 in an editing panel 1304. According to some embodiments, the system executing the UI, or the system in communication with another system executing the UI, identifies a recipient of the message 1301 in the message stream and annotates in the message stream the recipient with respect to the message 1301 (e.g., the system identifies and annotates “Larry Wall” as the author of the message 1301). According to some embodiments, the system distinguishes between a target user for the message 1301 and another user mentioned in the message 1301 and selects the target user as the recipient of the message 1301. For example, if another user is mentioned in the body of the message 1301, that user is not selected as the recipient of the message 1301. Instead the recipient selected or targeted by user “Larry Wall” is selected as the recipient of the message 1301. According to some embodiments, the system determines whether the message 1301 relates to a special codeblock (e.g., an altered codeblock, an orphaned codeblock, etc.). If the message 1301 is determined to relate to a special codeblock, the system is configured to visually distinguish the message 1301 in the communication panel 1306 to indicate this relationship to the user.

According to some embodiments, if the system receives a modification of the original code 1308 in the editing panel 1304 (e.g., additional code added, deleted, renumbered, moved), the system stores metadata for preserving communication thread linkage between the modified code and the respective message stream associated with the original code 1308. The modification may be received in the message 1301 or a user of the system may directly enter the modification into editing panel 1304. According to some embodiments, the system stores, in metadata relating to the original code 1308, a commit identification of the code in the editing panel 1304 and/or a commit identification of the modified code (e.g., when the modified code is included in a code repository, e.g., git repository). For example, the system may store the commit identification to help keep track of changes to the original code 1308 across different versions of the code stored in a code repository.

According to some embodiments, the system determines whether the modification comprises deletion of a portion or all of the original code 1308 in the editing panel 1304. In response to determining that the modification comprises such a deletion, the system is configured to visually indicate, in the editing panel 1304, a portion of the editing panel 1304 corresponding to the deleted code. For example, such a visual indication may assist the user in identifying that code has been deleted and/or identifying code that came before and after the deleted code. Additionally or alternatively, the system may store, in metadata relating to the original code 1308, one or more messages in the message stream, e.g., the message 1301, corresponding to the deleted code. For example, the system may store this information in the metadata to keep track of changes to the original code 1308 across different versions of the code stored in a code repository. Another user reading the messages stored in the metadata may be provided with appropriate context for the changes made across the different versions of the code.

According to some embodiments, the system dynamically monitors the message stream for presence of code. For example, the user may receive a message that includes code, e.g., the code in the message 1301. The system may detect the presence of code based on detecting one or more special characters, one or more variable names, or another suitable indicator of presence of code in the message. For example, the system may detect the presence of code based on detecting one or more leading spaces or one or more leading tabs at the beginning of a line in the received message. In response to detecting code in a message in the message stream, the system may determine whether there is any corresponding code in the editing panel 1304. For example, the system may determine that the code in the message 1301 corresponds to the original code 1308 in the editing panel 1304. The system may execute a heuristic-based search algorithm to identify the corresponding code, e.g., the original code 1308, based on the code detected in the message, e.g., the code in the message 1301.

According to some embodiments, the system is configured to provide one or more options for receiving updated or modified code, for example, through the message panel. For example, the system may be configured to provide an option to the user (e.g., original author, editing user, responsible editor, viewing user, etc.) to accept the code change proposed in the message (e.g., 1301). For example, the system can display a set of selection options within the messaging panel responsive to receiving modified code (e.g., via selection of “Apply Patch” at 1324). Other options may include a “Show Diff” function at 1322. According to one embodiment, the “Show Diff” function is configured to trigger the system to display a code difference view in editing panel 1304, between the current version of the code being viewed by a given user and the code as it would appear if the proposed modifications are executed. According to one example, the code difference view is configured to show changes to the code in markup language. In other examples, the system is configured to provide an option for a copy code function at 1326. Selecting 1326 may store the code from the message 1301 in temporary memory, e.g., a clipboard, for later retrieval by the user. The system may provide an option for a warp function at 1320. The warp function allows the user or message recipient to view the editing panel for another user, e.g., the sender of message 1301. For example, the sender of message 1301 may view his version of the code in his editing panel. The sender may make modifications to his version of the code. The sender may subsequently send message 1301 including proposed modifications that correspond to his modifications to the code. The user or message recipient receiving message 1301 may select 1320 to view the sender's editing panel and observe the sender's modified code. The user or message recipient may select the option to view the sender's editing panel because the user may desire to view the sender's modified code prior to applying the proposed modifications from message 1301 to his own version of the code. According to one embodiment, selecting 1320 may allow the user or message recipient to observe another user's editing panel and view the other user make modifications to his version of the code in real time. The user may optionally send a message to the other user with feedback on the modifications as the other user makes them. The other user may alter his modifications based on the feedback from the user. In this manner, the warp function may allow the two users to collaborate on the modifications to the code before they are finalized. According to one embodiment, selecting 1320 may allow the user or message recipient to compare his version of the code with the message sender's version of the code. For example, the user or message recipient may view his version of the code in one half of the display and the message sender's code in the other half of the display.

According to one embodiment, the user or message recipient does not modify the original code in his editing panel. The message sender modifies the original code in his editing panel to generate the sender's modified code. The message sender sends a message with proposed modifications corresponding to the sender's modified code. In this case, a function, such as “Show Diff,” is configured to trigger the system to display a code difference view in the user's editing panel between the original code and a modified version of the original code with the proposed modifications executed. According to one embodiment, the “Show Diff” function is configured to determine a set of differences between the original code and the sender's modified code (and/or the proposed modifications) and execute the proposed modifications on the original code based on the set of differences. Other described functions may be similarly configured to compare the original code and a modified version of the original code with the proposed modifications executed.

According to one embodiment, the user or message recipient modifies the original code to generate the recipient's modified code. The message sender also modifies the original code in his editing panel to generate the sender's modified code. The message sender sends a message with proposed modifications corresponding to the sender's modified code. In this case, a function, such as “Show Diff,” is configured to trigger the system to display a code difference view in the user's editing panel between the recipient's modified code and a version of the recipient's modified code with the proposed modifications executed. In order to correctly apply the proposed modifications, the system needs to accommodate for concurrency issues arising from both the message recipient and the message sender having modified the original code in their respective editing panels. According to one embodiment, the “Show Diff” function is configured to determine a first set of differences between the original code and the sender's modified code (and/or the proposed modifications), determine a second set of differences between the recipient's modified code and the first set of differences, and execute the proposed modifications on the recipient's modified code based on the second set of differences. For example, a variable may be assigned a value X in the original code, a value Y in the recipient's modified code, and a value Z in the sender's modified code. The system executing the “Show Diff” function may determine that the first set of differences includes an indication that the variable is assigned value X in the original code and is to be changed to value Z from the sender's modified code (and/or the proposed modifications). The system may then determine that the second set of differences includes an indication that the variable is assigned value Y in the recipient's modified code and is to be changed to value Z from the first set of differences. The system may then execute the proposed modifications on the recipient's modified code based on the second set of differences and change the assigned value of the variable from Y to Z. The system may then display a code difference view in the user's editing panel between the recipient's modified code and this version of the recipient's modified code with the proposed modifications executed.

The systems and methods described are equally applicable to systems with more than two users. Concurrency issues between the message recipient's code and the message sender's code, such as those described above, may be magnified as the system is scaled to incorporate more than two users. Moreover, each user may be associated with multiple versions of code, including a version being edited in real time (or a live copy), a version saved locally (or a saved copy), and a version saved remotely (or a committed copy). The systems and methods described can accommodate a system with multiple users, each associated with multiple versions of the code. For example, the described systems and methods may scale up to thousands of users, each associated with one or more versions of the same code. FIG. 17 and the related description below describe an illustrative algorithm to address the case with two users, each associated with three versions of the code.

FIG. 14 illustrates an example UI 1400 showing the result of selecting the “Show Diff” function. The system displays a code difference view in the editing panel 1304 where code 1408 from the message recipient (corresponding to the original code 1308) and the sender's modified code 1409 from the message sender are shown. The code difference view may show changes to the code in markup language. The communication panel 1306 may include a function “Hide Diff” at 1422, which triggers the system to return to the code view in the editing panel 1304 as shown in FIG. 13 . Additionally or alternatively, the user may select in the UI 1400 from an option for the function to apply patch 1324, an option for the function to copy code 1326, or an option for the function to warp 1320 to the editing panel for another user, e.g., the sender of the message 1301.

FIG. 15 illustrates an example UI 1500 showing the result of selecting the “Apply Patch” function. When option 1324 is selected, the system is configured to accept the proposed code change detailed in the message 1301 shown in the communication panel 1306 and generate a new visualization of the code being visualized by the current user or message recipient (e.g., the recipient's modified code 1508) with changes introduced. For example, the system may automatically determine that the original code 1308 corresponds to the proposed code change in the message 1301, receive identifying information for the original code 1308 from the sender of the message 1301, or receive manual identification of the original code 1308 from the user or recipient of the message 1301. Subsequent to identification of the corresponding code, the system may replace the original code 1308 with the code from the message 1301 to generate the recipient's modified code 1508. Alternatively, the system may identify the differences between the code 1301 and the proposed code change and replace the portions of code 1301 that differ from the proposed code change. Additionally or alternatively, the communication panel 1306 may include a function “Revert” 1524, which triggers the system to revert the code to the version prior to applying the proposed code change from the message 1301 in the communication panel 1306, e.g., the original code 1308.

In conjunction, post, or prior to applying the proposed code change to the original code 1308 in one of the manners described above, the system may save metadata corresponding to the original code 1308 where the system may include one or more indications of this version of the original code 1308. For example, the system may store changes made to the original code 1308 or the entirety of the original code 1308 in the metadata along with identifying information for retrieving it at a later time (e.g., time, date, code file, commit identification and/or other suitable identifying information). When the user selects option 1524 to revert the code prior to the proposed code change being applied to the original code 1308, the system may retrieve the necessary information from the metadata to replace the recipient's modified code 1508 with the original code 1308.

FIG. 16 illustrates an example UI 1600 showing the result of selecting the warp function. Selecting the warp function may allow the message recipient to compare his version of the code 1608 in editing panel 1602 with the message sender's version of the code 1609 in editing panel 1603. For example, the sender of the message 1301 may be identified as “Larry Wall,” and on selection of option 1320 to “Warp to Larry,” the system may generate editing panel 1602 with code 1608 (corresponding to the original code 1308) and editing panel 1603 with code 1609 (corresponding to the sender's modified code 1409). In this illustrative example, the user or recipient can view his version of the code, e.g., code 1608, in one half of the screen and the message sender's code in the other half of the screen, e.g., code 1609. Differences in code 1608 and code 1609 may be shown using annotation visual elements, e.g., using markup language.

FIG. 17 is an example process flow 1700 for determining one or more differences between live copies of a codeblock. According to one embodiment, two users, A and B, may each have a live copy of a codeblock displayed on their respective systems. The live copy refers to one or more lines of code or a code file that include code that may have been modified but not yet saved to a local storage device. The live copy of the codeblock may also be referred to as the visualized instance of the codeblock. The live copy is a version of the codeblock that may differ from a saved copy, which may in turn differ from a committed copy of the codeblock. The saved copy refers to one or more lines of code or a code file that include code that may have been modified and saved to a local storage device but not yet committed to a remote storage device, e.g., a code repository. The saved copy of the codeblock may also be referred to as the local instance of the codeblock. The committed copy refers to one or more lines of code or a code file stored in a remote storage device, e.g., a code repository. The committed copy may additionally be classified as belonging a particular version stored in the code repository. The committed copy of the codeblock may also be referred to as the remote instance of the codeblock.

In one embodiment, determining one or more differences, e.g., across live copies of the codeblock for users A and B, requires analyzing and comparing the live copy, the saved copy and/or the committed copy of the codeblock for user A and the live copy, the saved copy and/or the committed copy of the codeblock for user B. In some examples, the system can maintain metadata information on changes made locally to code on a user system and compare metadata information on multiple users systems to determine any changes.

According to one aspect, given the complexity of determining differences, e.g., across live copies of the codeblock for users A and B, the system is augmented to resolve these complex comparisons based on executing a difference engine. In one embodiment, the difference engine can be configured to execute the process flow described with respect to FIG. 17 . In various embodiments, the difference engine is configured to manage code changes dynamically over time and between users. In other embodiments, the system can execute the same functions with or without instantiating a difference engine.

In one embodiment, the difference engine stores metadata that is associated with a code change and that details a codeblock associated with the code change. The difference engine preserves an association to the codeblock. The difference engine can be configured to generate and/or maintain the associations to codeblocks open on a computer as a live copy, preserved as saved copy, a committed copy, or another suitable version of the codeblock that can be modified (e.g., additional code added, deleted, renumbered, moved). The preservation may include reassigning the codeblock to include new code, deleted old code, or moved old code. In one embodiment, the difference engine identifies one or more differences between the visualized instance of the codeblock, associated with user A, and another instance of the codeblock, associated with user B. The difference engine may initiate the identification by determining, based on the metadata, whether the visualized instance of codeblock (e.g., a live copy) has been modified subsequent to storage of a local instance of the first version. Further details are provided below.

Referring to FIG. 17 , in this illustrative embodiment, the live copies of the codeblock for users A and B (live copy A, 1702; live copy B 1704) are compared to determine if there are any differences present across the live copies. Initially, the live copy of the codeblock for user B (live copy B, 1704) is compared with a saved copy of the codeblock for user B (saved copy B, 1706). If it is determined that live copy B has been modified since saved copy B was last stored in local storage, a first set of differences between saved copy B and live copy B is determined (e.g., accounting for differences between saved copy B and live copy B). For example, the difference engine may compare each corresponding line of live copy B and saved copy B to determine the lines that have changed across the two copies. In another example, the difference engine may employ a heuristic-based searched algorithm to determine common portions between saved copy B and live copy B and subsequently compare the remaining portions to determine the first set of differences. If it is determined that live copy B has not been modified since saved copy B was last stored in local storage (e.g., live copy B has not been edited since last saved copy B), the next step in process flow 1700 may be executed.

Next, the saved copy of the codeblock for user B (saved copy B, 1706) is compared with a committed copy of the codeblock for user B (committed copy B, 1708). If it is determined that saved copy B has been modified since committed copy B was last stored in remote storage, a second set of differences between committed copy B and the first set of differences is determined (e.g., accounting for differences between committed copy B and saved copy B). If it is determined that saved copy B has not been modified since committed copy B was last stored in remote storage, the next step in process flow 1700 may be executed,

Next, the committed copy of the codeblock for user B (committed copy B, 1708) is compared with a committed copy of the codeblock for user A (committed copy A, 1710). If it is determined that committed copy B does not correspond to committed copy A, a third set of differences between committed copy A and the second set of differences is determined (e.g., accounting for differences in both committed copies because they belong to different control versions in a code repository). If it is determined that committed copy B corresponds to committed copy A (e.g., both committed copies belong to the same control version in a code repository), the next step in process flow 1700 may be executed.

Next, the committed copy of the codeblock for user A (committed copy A, 1710) is compared with a saved copy of the codeblock for user A (saved copy A, 1712). If it is determined that saved copy A has been modified since committed copy A was last stored in remote storage, a fourth set of differences between saved copy A and the third set of differences is determined (e.g., accounting for differences between committed copy A and saved copy A). If it is determined that saved copy A has not been modified since committed copy A was last stored in remote storage (e.g., saved copy A has not been edited since last committed copy A), the next step in process flow 1700 may be executed.

Next, the saved copy of the codeblock for user A (saved copy A, 1712) is compared with a live copy of the codeblock for user A (live copy A, 1702). If it is determined that live copy A has been modified since saved copy A was last stored in local storage, a fifth set of differences between live copy A and the fourth set of differences is determined (e.g., accounting for differences between saved copy A and live copy A). If it is determined that live copy A has not been modified since saved copy A was last stored in remote storage (e.g., live copy A has not been edited since last saved copy A), the next step in process flow 1700 may be executed.

If no differences are identified across all comparisons described above, an indication is generated for display notifying the user that no differences have been identified between live copy A and live copy B. If one or more differences are identified across one or more of the comparisons described above, an indication is generated for display notifying the user that one or more differences have been identified between live copy A and live copy B. In one embodiment, a user interface panel is generated to display the one or more differences between the live copy of the codeblock for user A and the live copy of the codeblock for user B. The differences may be generated for displayed in the user interface panel based on the fifth set of differences. Alternatively, if the fifth set of differences was not determined (e.g., because there were no differences identified in the corresponding step), the fourth set of differences may be used for generating the display, and so on. Moreover, though the illustrated example is discussed with respect to live copies of the codeblock for different users, the systems and methods described are equally applicable to identifying differences across live copies, saved copies, committed copies, or other suitable versions of a codeblock for different users.

In one embodiment, when generating for display in the user interface panel the one or more differences, one or both of the live copies of the codeblock for users A and B are displayed. Additionally, each difference between the live copies may be annotated in the user interface panel for display to the user. For example, the annotations may be determined based on the fifth set of differences or another suitable set from the comparisons described above. In one embodiment, the user interface panel may generate, for display to user A, an apply function (e.g., apply patch) to change the live copy of the codeblock for user A to conform with the live copy of the codeblock for user B. Additionally, the user interface panel may generate, for display to user A, a revert function (e.g., revert patch) to revert to the visualized instance of the first version of the codeblock. In one embodiment, the user interface panel may generate, for display to user B, an apply function (e.g., apply patch) to change the live copy of codeblock for user B to conform with the live copy of the codeblock for user A. Additionally, the user interface panel may generate, for display to user B, a revert function (e.g., revert patch) to revert to the visualized instance of the first version of the codeblock.

FIG. 18 illustrates an example UI 1800 showing a view of communication systems such as communication channels 1802 and direct messages 1803 available in the UI 1800 displayed in a communication panel 1806, which can be utilized to communicate concerning original code 1808 in an editing panel 1804. According to some embodiments, the system executing the UI, or the system in communication with another system executing the UI, can enable a user to communicate view the one or more communication systems such as communication channels 1802 and direct messages 1803. According to some embodiments, which a communication system is selected such as the communication channels 1802 and the direct messages 1803, the communication panel 1806 may display one or more message streams that are occurring in the communication channels 1802 and the direct messages 1803. According to some embodiments, as further described below, the system executing the UI, or the system in communication with another system executing the UI, can generate one or more predefined forms for generating messages and communicating over the communication systems. As discussed herein, communication systems can be any type of communication systems that exchange messages between users, whether in real-time or delayed. For example, the communication channels 1802 may include message threads, blogs, message channels, etc. For example, the direct messages 1803 may include for example direct message systems such as Slack, Messenger, Skype, etc. Additionally, the communication panel 1806 may enable a user to create one or more new communication channels 1802 or direct messages 1803.

FIGS. 19A-19E illustrate an example UI 1900 showing a view of a comment form 1902 available in the UI 1900 displayed in a communication panel 1906, which can be utilized to communicate concerning a portion 1910 of code 1908 highlighted in an editing panel 1904. According to some embodiments, the comment form 1902 provides a predefined format for generating a comment message to be added to a message stream of a communication system.

As illustrated in FIG. 19A, the comment form 1902 includes a “post to” field 1912. The “post to” field 1912 may indicate the communication system that transmits the message generated by the comment form 1902. The “post to” field 1912 may be populated with the communication system that previously selected or that is predefined. The “post to” field 1912 may be populated with a selection or input made by a user in the comment form 1902. The comment form 1902 also includes a marker field 1914. The marker field 1914 allows the message created by the comment form 1902 to be marked with an identifier. For example, the identifier may be different colors that denote different levels of priority.

The comment form 1902 includes a subject field 1916. The subject field 1916 allows the message created by the comment form 1902 to include the part of the code 1908 that is the subject of the message. The subject field 1916 may contain a visualization of the portion 1910 of the code 1908, which is highlighted and is the subject of the comment. For example, as illustrated in FIG. 19A, the subject field 1916 may identify the portion 1910 of the code 1908, e.g., file name, code line numbers, etc., and may include a copy of the text of the portion 1910 of the code 1908.

The comment form 1902 also includes a message field 1918. The message field 1918 may receive message text entered by a user, as illustrated in FIG. 19B. The comment form 1902 includes “cancel” and “submit” buttons 1920. Upon selection of “submit” button, the message generated by the comment form 1902 may be submitted to the communication system identified in the “post to” field 1912 and placed in the communication stream, as illustrated in FIG. 19C. Upon selection of the “cancel” button, the message may be abandoned.

The comment form 1902 also includes one or more selection fields for selecting different forms for submitting different types of messages over the communication systems. The comment form 1902 may include a comment selection field 1922, a question selection field 1924, an issue selection field 1926, and a code trap selection field 1928. Upon selection of the comment selection field 1922, the comment form 1902 may be displayed in the communication panel 1906, as illustrated in FIG. 19A. Upon selection of the question selection field 1924, a question form may be displayed in the communication panel 1906, as illustrated in FIG. 20A below. Upon selection of the issue selection field 1926, an issue form may be displayed in the communication panel 1906, as illustrated in FIG. 21A below. Upon selection of the code trap selection field 1928, a code trap form may be displayed in the communication panel 1906, as illustrated in FIG. 22A below.

As illustrated in FIG. 19C, once the “submit” button is selected, a message 1930 is generated and placed in a message stream 1932 of the communication system. The message stream 1932 may be displayed in the communication panel 1906. The portion 1910 of the code 1908, which is the subject of the message 1930 is annotated with an active indicator 1934, which indicates the message 1930 is associated with the portion 1910 of the code 1908. The active indicator 1934 may be visually displayed to denote the type of message, such as a comment, an issue, a question, or a code trap. For example, as illustrated in FIG. 19C, the active indicator 1934 may be visually displayed as a thought bubble, denoting that the message 1930 is a comment.

As illustrated in FIG. 19D, the active indicator 1934 generates a pop-up window 1936 when a cursor is placed over the active indicator 1934. The pop-up window 1936 may display a summary and details of the message 1930 and include a link to access the message 1930. For example, the pop-up window 1936 may display the creator of the message 1930, the date and time of creation of the message 1930, and the message text associated with the message 1930. When the link is selected, the message 1930 may be displayed in the communication panel 1906, as illustrated in FIG. 19E. Additionally, as illustrated in FIG. 19E, the communication panel 1906 also includes a reply field 1938 that allows a reply to be generated and placed in the message stream 1932.

FIGS. 20A and 20B illustrate an example UI 2000 showing a view of a question form 2002 available in the UI 2000 displayed in a communication panel 2006, which can be utilized to communicate concerning a portion 2010 of code 2008 highlighted in an editing panel 2004. According to some embodiments, the question form 2002 provides a predefined format for generating a question about the portion 2010 of the code 2008 to be added to a message stream of a communication system.

As illustrated in FIG. 20A, the question form 2002 includes a “post to” field 2012. The “post to” field 2012 may indicate the communication system that transmits the message generated by the question form 2002. The “post to” field 2012 may be populated with the communication system that previously selected or that is predefined. The “post to” field 2012 may be populated with a selection or input made by a user in the question form 2002. The question form 2002 also includes a marker field 2014. The marker field 2014 may allow the message created by the question form 2002 to be marked with an identifier. For example, the identifier may be different colors that denote different levels of priority.

The question form 2002 includes a subject field 2016. The subject field 2016 allows the message created by the question form 2002 to include the part of the code 2008 that is the subject of the message. The subject field 2016 may contain a visualization of the portion 2010 of the code 2008, which is highlighted and is the subject of the comment. For example, as illustrated in FIG. 20A, the subject field 2016 may identify the portion 2010 of the code 2008, e.g., file name, code line numbers, etc., and may include a copy of the text of the portion 2010 of the code 2008.

The question form 2002 also includes a title field 2017 and a message field 2018. The title field 2017 and the message field 2018 may receive title text and message text entered by a user, as illustrated in FIG. 20B. The question form 2002 may include “cancel” and “submit” buttons 2020. Upon selection of “submit” button, the message generated by the question form 2002 may be submitted to the communication system identified in the “post to” field 2012 and placed in the communication stream, as described above. Upon selection of the “cancel” button, the message may be abandoned.

The question form 2002 also includes one or more selection fields for selecting different forms for submitting different types of messages over the communication systems. The question form 2002 may include a comment selection field 2022, a question selection field 2024, an issue selection field 2026, and a code trap selection field 2028. Upon selection of the comment selection field 2022, the comment form 2002 may be displayed in the communication panel 1906, as described above. Upon selection of the question selection field 2024, a question form may be displayed in the communication panel 2006, as illustrated in FIG. 20A. Upon selection of the issue selection field 2026, an issue form may be displayed in the communication panel 2006, as illustrated in FIG. 21A below. Upon selection of the code trap selection field 2028, a code trap form may be displayed in the communication panel 2006, as illustrated in FIG. 22A below.

Once the “submit” button is selected, a message is generated and placed in a message stream of the communication system. The message stream may be displayed in the communication panel 2006. As described above, the portion 2010 of the code 2008, which is the subject of the message may be annotated with an active indicator, which indicates the message is associated with the portion 2010 of the code 2008. The active indicator may be visually displayed to denote the type of message, such as a comment, an issue, a question, or a code trap. For example, the active indicator may be visually displayed as a question mark, denoting that the message is a question.

As described above, the active indicator also generates a pop-up window when a cursor is placed over the active indicator. The pop-up window may display a summary and details of the question and include a link to access the message. For example, the pop-up window may display the creator of the question, the date and time of creation of the question, and the message text associated with the question. When the link is selected, the question may be displayed in the communication panel 2006, as described above. Additionally, the communication panel 2006 may include a reply field that allows a reply to be generated and placed in the message stream.

FIGS. 21A-21E illustrate an example UI 2100 showing a view of an issue form 2102 available in the UI 2100 displayed in a communication panel 2106, which can be utilized to communicate concerning a portion 2110 of code 2108 highlighted in an editing panel 2104. According to some embodiments, the issue form 2102 provides a predefined format for generating an issue message to be added to a message stream of a communication system.

As illustrated in FIG. 21A, the issue form 2102 includes a “post to” field 2112. The “post to” field 2112 may indicate the communication system that transmits the message generated by the comment form 2102. The “post to” field 2112 may be populated with the communication system that previously selected or that is predefined. The “post to” field 2112 may be populated with a selection or input made by a user in the issue form 2102. The issue form 2102 also includes a marker field 2114. The marker field 2114 allows the message created by the issue form 2102 to be marked with an identifier. For example, the identifier may be different colors that denote different levels of priority.

The issue form 2102 includes a subject field 2116. The subject field 2116 allows the message created by the issue form 2102 to include the part of the code 2108 that is the subject of the message. The subject field 2116 may contain a visualization of the portion 2110 of the code 2108, which is highlighted and is the subject of the issue. For example, as illustrated in FIG. 21A, the subject field 2116 may identify the portion 2110 of the code 2108, e.g., file name, code line numbers, etc., and may include a copy of the text of the portion 2110 of the code 2108.

The issue form 2102 also includes a title field 2117, an assignees field 2118, and a message field 2119. The title field 2117 and message field 2119 may receive message text entered by a user. The assignees field 2118 may allow a person or entity to be assigned to address the issue that is the subject of the issue form 2102. For example, as illustrated in FIG. 21B, when the assignees field 2118 is selected, the assignees field 2118 may be populated with one or more users that may be selected to be assigned to the issue. The issue form 2102 includes “cancel” and “submit” buttons 2120. Upon selection of “submit” button, the issue message generated by the issue form 2102 may be submitted to the communication system identified in the “post to” field 2112 and placed in the communication stream, as illustrated in FIG. 21C. Upon selection of the “cancel” button, the issue message may be abandoned.

The issue form 2102 also includes one or more selection fields for selecting different forms for submitting different types of messages over the communication systems. The issue form 2102 may include a comment selection field 2122, a question selection field 2124, an issue selection field 2126, and a code trap selection field 2128. Upon selection of the comment selection field 2122, the comment form may be displayed in the communication panel 2106, as illustrated in FIG. 19A above. Upon selection of the question selection field 2124, a question form may be displayed in the communication panel 2106, as illustrated in FIG. 20A above. Upon selection of the issue selection field 2126, an issue form 2102 may be displayed in the communication panel 2106, as illustrated in FIG. 21A. Upon selection of the code trap selection field 2128, a code trap form may be displayed in the communication panel 2106, as illustrated in FIG. 22A below.

As illustrated in FIG. 21C, once the “submit” button is selected, a message 2130 is generated and placed in a message stream 2132 of the communication system. The message stream 2132 may be displayed in the communication panel 2106. The portion 2110 of the code 2108, which is the subject of the message 2130, is annotated with an active indicator 2134, which indicates the message 2130 is associated with the portion 2110 of the code 2108. The active indicator 2134 may be visually displayed to denote the type of message, such as a comment, an issue, a question, or a code trap. For example, as illustrated in FIG. 21C, the active indicator 2134 may be visually displayed as a bug icon, denoting that the message 2130 is an issue message.

As illustrated in FIG. 21D, the active indicator 2134 generates a pop-up window 2136 when a cursor is placed over the active indicator 2134. The pop-up window 2136 may display a summary and details of the message 2130 and include a link to access the message 2130. For example, the pop-up window 2136 may display the creator of the message 2130, the date and time of creation of the message 2130, and the message text associated with the message 2130. When the link is selected, the message 2130 may be displayed in the communication panel 2106, as illustrated in FIG. 21E. Additionally, as illustrated in FIG. 21E, the communication panel 2106 also includes a reply field 2138 that allows a reply to be generated and placed in the message stream 2132.

FIGS. 22A-22D illustrate an example UI 2200 showing a view of a code trap form 2202 available in the UI 2200 displayed in a communication panel 2206, which can be utilized to communicate concerning a portion 2210 of code 2208 highlighted in an editing panel 2204. According to some embodiments, the code trap form 2202 provides a predefined format for identifying the portion 2210 of the code 2208 as critical and generate a code trap for the portion 2210. According to some embodiments, a code trap may be an access restriction that identifies the portion 2210 as being critical and apply access controls on which users may edit the portion 2210. Additionally, the code trap form 2202 may generate a code trap message to be added to a message stream of a communication system.

As illustrated in FIG. 22A, the code trap form 2202 includes a “post to” field 2212. The “post to” field 2212 may indicate the communication system that transmits the message generated by the code trap form 2202. The “post to” field 2212 may be populated with the communication system that previously selected or that is predefined. The “post to” field 2212 may be populated with a selection or input made by a user in the code trap form 2202. The code trap form 2202 also includes a marker field 2214. The marker field 2214 allows the message created by the code trap form 2202 to be marked with an identifier. For example, the identifier may be different colors that denote different levels of priority.

The code trap form 2202 includes a subject field 2216. The subject field 2216 allows the message created by the code trap form 2202 to identify and include the part of the code 2208 that is the subject of the message. The subject field 2216 may contain a visualization of the portion 2210 of the code 2208, which is highlighted and is the subject of the code trap. For example, as illustrated in FIG. 22A, the subject field 2216 may identify the portion 2210 of the code 2208, e.g., file name, code line numbers, etc., and may include a copy of the text of the portion 2210 of the code 2208.

The code trap form 2202 also includes a description field 2217 and a message field 2218. The description field 2217 may include an explanation of the functionality of a code trap. The message field 2218 may receive message text entered by a user. The code trap form 2202 includes “cancel” and “submit” buttons 2220. Upon selection of “submit” button, the issue message generated by the code trap form 2202 may be submitted to the communication system identified in the “post to” field 2112 and placed in the communication stream, as illustrated in FIG. 22B. Additionally, upon selection of the “submit” button, the code trap may be generated and access controls may be placed on the portion 2210 of the code 2208. Upon selection of the “cancel” button, the issue message may be abandoned.

The code trap form 2202 also includes one or more selection fields for selecting different forms for submitting different types of messages over the communication systems. The code trap form 2202 may include a comment selection field 2222, a question selection field 2224, an issue selection field 2226, and a code trap selection field 2228. Upon selection of the comment selection field 2222, the comment form may be displayed in the communication panel 2206, as illustrated in FIG. 19A above. Upon selection of the question selection field 2224, a question form may be displayed in the communication panel 2206, as illustrated in FIG. 20A above. Upon selection of the issue selection field 2226, an issue form may be displayed in the communication panel 2206, as illustrated in FIG. 21A above. Upon selection of the code trap selection field 2228, a code trap form 2202 may be displayed in the communication panel 2206, as illustrated in FIG. 22A.

As illustrated in FIG. 22B, once the “submit” button is selected, a code trap message 2230 is generated and placed in a message stream 2232 of the communication system. The message stream 2232 may be displayed in the communication panel 2206. The portion 2210 of the code 2208, which is the subject of the code trap message 2230, is annotated with an active indicator 2234, which indicates the message 2230 is associated with the portion 2210 of the code 2208. The active indicator 2234 may be visually displayed to denote the type of message, such as a comment, an issue, a question, or a code trap. For example, as illustrated in FIG. 22B, the active indicator 2234 may be visually displayed as a yield sign icon, denoting that the portion 2210 of the code 2208 is subject to a code trap, and the message 2230 is an code trap message. Additionally, the portion 2210 of the code 2208, which is the subject of the code trap message 2230, may be highlighted, which indicates that the portion 2210 of the code 2208 is subject to a code trap, e.g., editing and access controls and restrictions.

As illustrated in FIG. 22C, the active indicator 2234 generates a pop-up window 2236 when a cursor is placed over the active indicator 2234. The pop-up window 2236 may display a summary and details of the message 2230 and include a link to access the message 2230. For example, the pop-up window 2236 may display the creator of the message 2230, the date and time of creation of the message 2230, and the message text associated with the message 2220. When the link is selected, the message 2230 may be displayed in the communication panel 2206, as illustrated in FIG. 22D. Additionally, as illustrated in FIG. 22D, the communication panel 2206 also includes a reply field 2238 that allows a reply to be generated and placed in the message stream 2232.

According to some embodiments, the comments, questions, issues, and code traps generated by the comment form, question form, issue form, and code trap form described above are categorized and stored in a knowledge base. The knowledge base may be stored in any of the computer readable media described above. FIGS. 23A-23I illustrate an example UI 2300 showing a view of a knowledge base list 2302 available in the UI 2300 displayed in a communication panel 2306, which can be utilized to view messages and communicate concerning code 2308 in an editing panel 2304. According to some embodiments, the knowledge base list 2302 includes a code comment link 2310, a questions and answers link 2312, an issues link 2314, and a code traps link 2316. Each link provides an access link to view messages that are categorized in the knowledge base. For example, activating the code comment link 2310 displays the comments messages in the communication panel 2306 that are stored in the knowledge base; activating the questions and answers link 2312 displays the questions messages in the communication panel 2306 that are stored in the knowledge base; activating the issues link 2314 displays the issue messages in the communication panel 2306 that are stored in the knowledge base; and activating the code traps link 2316 displays the code traps message in the communication panel 2306 that are stored in the knowledge base.

FIG. 23B illustrates a comments message list 2318 that is displayed upon the selection of the code comments link 2310. As illustrated, the comments message list 2318 displays the comment messages that are stored in the knowledge base. The comment messages may be arranged and displayed in any order, for example, chronological order. Likewise, the ordering of the messages may be changed by the user. The comments message list 2318 may display, for each message, information and details of the message. For example, the comments message list 2318 may display, for each message an icon or name that identifiers the creator of the message, a marker that identifies a classification of the message such as priority, and an identification of which file is associated with the message. To view a message and further communication, a message in the comments message list 2318 may be selected and, in response, the message stream associated with the message may be displayed in the communication panel 2306.

FIG. 23C illustrates a questions and answers list 2320 that is displayed upon the selection of the questions and answers link 2312. As illustrated, the questions and answers list 2320 displays the question and answer messages that are stored in the knowledge base. The question and answer messages may be arranged and displayed in any order or according to any categorization. For example, as illustrated, the questions and answers list 2320 may be divided into two categories: unanswered questions 2322 and recent questions 2324. The ordering or categorization of the messages may be changed by the user. The questions and answers list 2320 may display, for each message, information and details of the message. For example, the questions and answers list 2320 may display, for each message an icon or name that identifiers the creator of the message, a marker that identifies a classification of the message such as priority, a short summary of the question or answer, and an identification of which file is associated with the message. To view a message and further communicate, a message in the questions and answers list 2320 may be selected and, in response, the message stream associated with the message may be displayed in the communication panel 2306. Additionally, as illustrated in FIG. 23D, a question message 2325 may be displayed upon the cursor moving over the question message 2325.

FIG. 23E illustrates an issues list 2326 that is displayed upon the selection of the issues link 2314. As illustrated, the issues list 2326 displays the issue messages that are stored in the knowledge base. The issue messages may be arranged and displayed in any order or according to any categorization. For example, as illustrated, the issues list 2326 may be divided into two categories: open and assigned issues 2328, open issues 2330, and closed issues 2332 (as illustrated in FIG. 23F). The ordering or categorization of the messages may be changed by the user. For example, as illustrated in FIG. 23F, the issues list 2326 may include a selection box 2334 that moves the messages to different categories, for example, from open to closed.

The issues list 2326 may display, for each message, information and details of the message. For example, the issues list 2326 may display, for each message an icon or name that identifiers the creator of the message, a marker that identifies a classification of the message such as priority, a short summary of the question or answer, and an identification of which file is associated with the message. To view a message and further communicate, a message in the issues list 2326 may be selected and, in response, the message stream associated with the message may be displayed in the communication panel 2306. Additionally, as illustrated in FIG. 23G, an issue message 2336 may be displayed upon the cursor moving over the issue message 2336.

FIG. 23H illustrates a code traps message list 2338 that is displayed upon the selection of the code traps link 2316. As illustrated, the code traps message list 2338 displays the code traps that are stored in the knowledge base. The code traps may be arranged and displayed by any categorization or in any order, for example, chronological order. Likewise, the ordering of the code traps may be changed by the user. The code traps message list 2338 may display, for each code trap, information and details of the code trap. For example, the code traps message list 2338 may display, for each code trap, an icon or name that identifiers the creator of the code trap, a marker that identifies a classification of the code trap such as priority, and an identification of which file is associated with the code trap. To view a code trap and further communication, a code trap in the code traps message list 2338 may be selected and, in response, the message stream associated with the code trap may be displayed in the communication panel 2306. Additionally, as illustrated in FIG. 23I, a code trap message 2340 may be displayed upon the cursor moving over the code trap message 2340. Additionally, upon selection or the cursor moving over the code trap message 2340, the editing panel 2304 may navigate to the portion of the code 2308 that is the subject of code trap message 2340.

According to some embodiments, in addition to communicating message between users, the messages stored in the knowledge base may be exported to one or more external software programs. For example, issue messages may be exported to more or more third party software programs such as JIRA and Trello. According to some embodiments, in addition exporting messages, the messages may be imported from one or more external software programs and stored in the knowledge base. For example, issue messages may be imported from more or more third party software programs such as JIRA and Trello and stored in the knowledge base.

According to one embodiment, a communication system can include one or more APIs for integrating VCS applications or services, as well as APIs for maintain IDE functionality and real time communication channels in cloud provided resources.

Further, various examples may be implemented as programmed or non-programmed elements, or any combination thereof. For example, a web page may be implemented using HTML while a data object called from within the web page may be written in C++. Thus, the examples are not limited to a specific programming language and any suitable programming language could be used. Accordingly, the functional components disclosed herein may include a wide variety of elements, e.g., specialized hardware, executable code, data structures or data objects, that are configured to perform the functions described herein.

Having thus described several aspects of at least one example, it is to be appreciated that various alterations, modifications, and improvements will readily occur to those skilled in the art. For instance, examples disclosed herein may also be used in other contexts. Such alterations, modifications, and improvements are intended to be part of this disclosure, and are intended to be within the scope of the examples discussed herein. Accordingly, the foregoing description and drawings are by way of example only.

Use of ordinal terms such as “first,” “second,” “third,” “a,” “b,” “c,” etc., in the claims to modify or otherwise identify a claim element does not by itself connote any priority, precedence, or order of one claim element over another or the temporal order in which acts of a method are performed, but are used merely as labels to distinguish one claim element having a certain name from another element having a same name (but for use of the ordinal term) to distinguish the claim elements. 

1-20. (canceled)
 21. A method for augmenting a software development environment, the method comprising: managing access to a code repository and version control application; generating a communication interface integrated into a code editor and code navigation display, wherein the communication interface is configured to display a message stream of user based communication associated with code displayed in the code editor; receiving, via the code navigation display, a request to generate a message associated with code being edited in the code editor, the request identifying a type of the message to generate; generating a predefined form for generating the message, wherein the predefined form comprises one or more fields associated with the type of the message, a system posting field indicating a channel of a communication system to transmit to, the message generated by the predefined form, and a field indicating a marker selection for the message; displaying the predefined form in the communication interface including displaying, via the predefined form, a portion of the code being edited in the code editor; receiving, via the predefined form, data to be included in the message; generating the message based on the data received in the predefined form based on a selection received in the predefined form, wherein the message is associated with a codeblock and a reference to the codeblock is embedded into the message; providing the message to the channel of the communication system identified in the system posting field; monitoring one or more message streams; determining whether the one or more message streams relate to the codeblock; identifying the codeblock based on text of a message in the one or more message streams; and visually distinguishing the one or more message streams in the communication interface to indicate a relationship to the user. 